package servlets;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import utiles.FuncionesImpl;

import capaLogica.Ciudad;
import capaLogica.CiudadBO;
import capaLogica.Comentario;
import capaLogica.ComentarioBO;
import capaLogica.Evento;
import capaLogica.EventoBO;
import capaLogica.Multimedia;
import capaLogica.MultimediaBO;
import capaLogica.Noticia;
import capaLogica.NoticiaBO;
import capaLogica.PerfilBO;
import capaLogica.PerfilConcurso;
import capaLogica.PerfilFestival;
import capaLogica.PerfilGrupo;
import capaLogica.PerfilSala;
import capaLogica.Usuario;
import capaLogica.UsuarioBO;

/**
 * Servlet implementation class UsuarioExternoCO
 */
public class UsuarioExternoCO extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UsuarioExternoCO() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String accion = request.getParameter("accion");
		try {
			procesarAccion(accion, request, response);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void procesarAccion(String accion, HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException, ParseException {
		if (accion.equals("entrar")) {
			entrar(request, response);
		}else if ( accion.equals("busquedaSimple")){
			listarResultadosSimples(request,response);
		}else if ( accion.equals("busquedaDetallada") ){
			listaResultadoComplejos(request,response);
		}else if ( accion.equals("paginaBusqueda")){
			paginaPrincipal(request,response);
		}else if ( accion.equals("verEvento")){
			verEvento(request,response);
		}else if ( accion.equals("verEventosPerfil")){
			verEventosPerfil(request,response);
		}else if ( accion.equals("listarNoticias")){
			entrar(request,response);
		}else if ( accion.equals("verPerfilExterno")){
			verPerfilExterno(request,response);
		}

}

	private void listaResultadoComplejos(HttpServletRequest request,
			HttpServletResponse response) throws ParseException, ServletException, IOException {
		
		String ciudad = request.getParameter("ciudades");
		String fecha = request.getParameter("fechaEvento");
		
		EventoBO eBO = new EventoBO();
		Evento e = new Evento();
		if ( "".equals(fecha) ){
			e.setFechaEvento(null);
		}else{
			e.setFechaEvento(FuncionesImpl.getStringAsFecha(fecha));
		}
		e.setIdCiudad(ciudad);
		List<Evento> listaEventos = eBO.recuperaEventoBusqueda(e);
		
		request.setAttribute("listaEventos", listaEventos);
		
		request.getRequestDispatcher("listarBusquedaComplejaExterna.jsp").include(request, response);
		
	}

	private void listarResultadosSimples(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String nombrePerfil = request.getParameter("nombreUsuarioSimple");
		PerfilBO perfilBO = new PerfilBO();
		
		List<PerfilGrupo> listaGrupo = perfilBO.recuperarPerfilGrupoByNombre(nombrePerfil);
		List<PerfilSala> listaSala = perfilBO.recuperarPerfilSalaByNombre(nombrePerfil);
		List<PerfilFestival> listaFestival = perfilBO.recuperarPerfilFestivalByNombre(nombrePerfil);
		List<PerfilConcurso> listaConcurso = perfilBO.recuperarPerfilConcursoByNombre(nombrePerfil);
		
		request.setAttribute("listaGrupo",listaGrupo);
		request.setAttribute("listaSala", listaSala);
		request.setAttribute("listaFestival", listaFestival);
		request.setAttribute("listaConcurso", listaConcurso);
		
		request.getRequestDispatcher("listaResultadosBusquedaExterna.jsp").include(request, response);
		
		
	}

	private void paginaPrincipal(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		CiudadBO ciudadesBO = new CiudadBO();
		List<Ciudad> listaCiudades = ciudadesBO.recuperarTodas();
		request.setAttribute("ciudades", listaCiudades);
		request.getRequestDispatcher("busquedaExterna.jsp").include(request, response);
	}

	private void entrar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		NoticiaBO noticiaBO = new NoticiaBO();
		List<Noticia> listaNoticias = noticiaBO.recuperarTodas();
		request.setAttribute("noticias", listaNoticias);
		request.getRequestDispatcher("index2Externo.jsp").include(request, response);
		
	}
	
	private void verEvento(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idEvento = request.getParameter("idEvento");
		EventoBO eventoB = new EventoBO();
		Evento evento = eventoB.recuperarEventoById(idEvento);
		ComentarioBO comentarioBO = new ComentarioBO();
		List<Comentario> listaC = comentarioBO.recuperarTodos();
		
		MultimediaBO multiBO = new MultimediaBO();
		List<Multimedia> listaFotos = multiBO.recuperarFotosByEvento(idEvento);
		List<Multimedia> listaVideo = multiBO.recuperarVideoByEvento(idEvento);
		
		request.setAttribute("listaComentario", listaC);
		request.setAttribute("listaFoto", listaFotos);
		request.setAttribute("listaVideo", listaVideo);
		request.setAttribute("evento", evento);
		request.getRequestDispatcher("visualizarEventoExterno.jsp").include(request, response);
		
	}
	
	private void verEventosPerfil(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idPerfil = request.getParameter("idPerfil");
		UsuarioBO uB = new UsuarioBO();
		Usuario usuarioPerfil = uB.recuperarUsuarioByPerfil(idPerfil);
		
		EventoBO em = new EventoBO();
		List<Evento> tareas = em.recuperarEventosByUsuario(usuarioPerfil.getIdUsuario());
		
		request.setAttribute("listaEvento", tareas);
		request.getRequestDispatcher("verEventosPerfilExterno.jsp").include(request, response);
		
	}
	
	private void verPerfilExterno(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idPerfil = request.getParameter("idPerfil");
		UsuarioBO userBO = new UsuarioBO();
		Usuario user = userBO.recuperarUsuarioByPerfil(idPerfil);
		
		if ( "1".equals(user.getIdTipo()) ){
			PerfilBO perfilG = new PerfilBO();
			PerfilGrupo pg = perfilG.recuperarPerfilGrupoById(idPerfil);
			request.setAttribute("perfilExterno", pg);
			request.getRequestDispatcher("perfilGrupoExterno2.jsp").include(request, response);
		}
		
		if ( "2".equals(user.getIdTipo()) ){
			PerfilBO perfilG = new PerfilBO();
			PerfilSala pg = perfilG.recuperarPerfilSalaById(idPerfil);
			request.setAttribute("perfilExterno", pg);
			request.getRequestDispatcher("perfilSalaExterno2.jsp").include(request, response);
		}
		
		if ( "3".equals(user.getIdTipo()) ){
			PerfilBO perfilG = new PerfilBO();
			PerfilFestival pg = perfilG.recuperarPerfilFestivalById(idPerfil);
			request.setAttribute("perfilExterno", pg);
			request.getRequestDispatcher("perfilFestivalExterno2.jsp").include(request, response);
		}
		
		if ( "4".equals(user.getIdTipo()) ){
			PerfilBO perfilG = new PerfilBO();
			PerfilConcurso pg = perfilG.recuperarPerfilConcursoById(idPerfil);
			request.setAttribute("perfilExterno", pg);
			request.getRequestDispatcher("perfilConcursoExterno2.jsp").include(request, response);
		}
		
		
		
	}
}
